Solid-state drives (herein “SSDs”) store data persistently in solid-state memory such as NAND flash memory. SSDs offer advantages over traditional hard disk drives, such as improved resistance to mechanical shock, lower power consumption, and faster access times. SSDs have a different set of operating constraints than hard disk drives. As a first example, SSDs can be programmed with high granularity (e.g., at the byte or word level), but must be erased with far less granularity (e.g., at the block level). As a second example, SSDs typically require that a write operation span physically sequential flash pages. As a third example, SSDs have a much longer erase time than read times or write times. As a fourth example, each block in an SSD can only endure a finite number of erase cycles.